//
// Created by 李光辉 on 2020/12/31.
//

#include <stdio.h>
#include <stdlib.h>
#include <mpi.h>

int main(void)
{

    int x[4];

    int i,j;
    int comm_sz;
    int my_rank;
    MPI_Datatype new_type;

    int index=0;
    for(i=0;i<4;i++)
    {
        x[i]=(++index);
        //y[i]=-1;    一旦初始化便会出错。原因未知
    }

    MPI_Init(NULL,NULL);
    MPI_Comm_size(MPI_COMM_WORLD,&comm_sz);
    MPI_Comm_rank(MPI_COMM_WORLD,&my_rank);

    MPI_Type_contiguous(4,MPI_INT,&new_type);
    MPI_Type_commit(&new_type);

    if(my_rank == 0)
    {
        MPI_Send(x,1,new_type,1,0,MPI_COMM_WORLD);
    }
    else if(my_rank == 1)
    {
        int* y=malloc(4*sizeof(int));
        MPI_Recv(y,4,MPI_INT,0,0,MPI_COMM_WORLD,MPI_STATUS_IGNORE);

        for(i=0;i<4;i++)
            printf("%d \n",y[i]);
    }
    MPI_Finalize();
    return 0;
}
